#ifndef SCOREBOARDTEST_H_
#define SCOREBOARDTEST_H_

#include <cppunit/extensions/HelperMacros.h>

class ScoreboardTest: public CppUnit::TestFixture {
	CPPUNIT_TEST_SUITE(ScoreboardTest);
	CPPUNIT_TEST(testEmptyScoreboard);
	CPPUNIT_TEST(testAddScoreWhenScoreboardIsEmpty);
	CPPUNIT_TEST(testAddScoreWhenScoreboardIsNotFull);
	CPPUNIT_TEST(testAddTopScoreWhenScoreboardIsFull);
	CPPUNIT_TEST(testAddNontopScoreWhenScoreboardIsFull);
	CPPUNIT_TEST(testAddScoreWhenScoreboardIsFullAndScoreIsSameAsTheLastOne);
	CPPUNIT_TEST(testSortSameScores);
	CPPUNIT_TEST(testIsTopScoreWhenScoreboardIsEmpty);
	CPPUNIT_TEST(testIsTopScoreWhenScoreboardIsNotFull);
	CPPUNIT_TEST(testIsTopScoreWhenScoreboardIsFullAndScoreIsTop);
	CPPUNIT_TEST(testIsTopScoreWhenScoreboardIsFullAndScoreIsNotTop);
	CPPUNIT_TEST(testIsTopScoreWhenScoreboardIsFullAndScoreIsSameAsTheLastOne);
	CPPUNIT_TEST(testAddScoreThrowsExceptionWhenMovesAreLessThanNull);
	CPPUNIT_TEST(testAddScoreThrowsExceptionWhenPlayerNameIsInvalid);
	CPPUNIT_TEST(testIsTopScoreThrowsExceptionWhenMovesAreLessThanNull);
	CPPUNIT_TEST_SUITE_END();

public:
	void setUp();
	void tearDown();

	void testEmptyScoreboard();
	void testAddScoreWhenScoreboardIsEmpty();
	void testAddScoreWhenScoreboardIsNotFull();
	void testAddTopScoreWhenScoreboardIsFull();
	void testAddNontopScoreWhenScoreboardIsFull();
	void testAddScoreWhenScoreboardIsFullAndScoreIsSameAsTheLastOne();
	void testSortSameScores();
	void testIsTopScoreWhenScoreboardIsEmpty();
	void testIsTopScoreWhenScoreboardIsNotFull();
	void testIsTopScoreWhenScoreboardIsFullAndScoreIsTop();
	void testIsTopScoreWhenScoreboardIsFullAndScoreIsNotTop();
	void testIsTopScoreWhenScoreboardIsFullAndScoreIsSameAsTheLastOne();
	void testAddScoreThrowsExceptionWhenMovesAreLessThanNull();
	void testAddScoreThrowsExceptionWhenPlayerNameIsInvalid();
	void testIsTopScoreThrowsExceptionWhenMovesAreLessThanNull();
};

#endif /* SCOREBOARDTEST_H_ */
